package com.lqk.java8.streamAPI1;


import com.lqk.java8.optional.Employee;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * 一 stream的三个操作步骤
 * 1. 创建Stream
 *      1. 可以通过Colleacion 系列集合提供的stream()(获取的是串行流) 或 parallelStream()(获取的是并行流)
 *          List<String> list = new ArrayList<>();
 *         Stream<String> stream1 = list.stream();
 *      2. 通过Arrays中的静态方法stream()获取数组流
 *          Employee[] emps=new Employee[10];
 *         Stream<Employee> stream2 = Arrays.stream(emps);
 *      3. 通过Stream类中的静态方法of()获取流
 *          Stream<String> stream3 = Stream.of("aa", "bb", "cc");
 *      4. 创建无限流
 *          迭代: Stream<Integer> stream4 = Stream.iterate(0, (x) -> x + 2);
 *          生成: Stream.generate(()->(int) Math.random()*10)
 *                                     .limit(5)
 *                                     .forEach(System.out::println);
 * 2. 中间操作
 * 3. 终止操作(终端操作)
 */
public class StreamAPI1 {

    //创建Stream
    @Test
    public void test1(){
        //1. 可以通过Colleacion 系列集合提供的stream()(获取的是串行流) 或 parallelStream()(获取的是并行流)
        List<String> list = new ArrayList<>();
        Stream<String> stream1 = list.stream();
        //2. 通过Arrays中的静态方法stream()获取数组流
        Employee[] emps=new Employee[10];
        Stream<Employee> stream2 = Arrays.stream(emps);
        //3. 通过Stream类中的静态方法of()获取流
        Stream<String> stream3 = Stream.of("aa", "bb", "cc");
        //4. 创建无限流
        //迭代
        Stream<Integer> stream4 = Stream.iterate(0, (x) -> x + 2);

        //生成
        Stream.generate(()->(int) Math.random()*10)
                                    .limit(5)
                                    .forEach(System.out::println);

    }

}
